package cn.wonderland.system.service.impl;

import cn.wonderland.system.domain.Role;
import cn.wonderland.system.mapper.MenuMapper;
import cn.wonderland.system.mapper.PermissionMapper;
import cn.wonderland.system.mapper.RoleMapper;
import cn.wonderland.system.service.IRoleService;
import cn.wonderland.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author wonderland
 * @since 2023-05-10
 */
@Service
public class RoleServiceImpl extends BaseServiceImpl<Role> implements IRoleService {

    @Autowired
    private RoleMapper roleMapper;

    @Autowired
    private MenuMapper menuMapper;

    @Autowired
    private PermissionMapper permissionMapper;



    /**
     * 新增角色信息
     * 1.添加角色信息
     * 2.添加中间表信息 t_role_menu  t_role_permission
     *
     * @param role
     */
    @Override
    @Transactional
    public void add(Role role) {
        // 1.添加角色信息
        super.add(role);
        // 2.添加中间表信息 t_role_menu  t_role_permission
        menuMapper.addMiddle(role.getId(),role.getMenus());
        permissionMapper.addMiddle(role.getId(),role.getPermissions());
    }

    /**
     * 修改角色信息
     * 1.修改角色信息
     * 2.先删除中间表信息 t_role_menu  t_role_permission
     * 3.再添加中间表信息 t_role_menu  t_role_permission
     * @param role
     */
    @Override
    @Transactional
    public void update(Role role) {
        // 添加角色数据
        super.update(role);
        // 删除role_menu中间表
        menuMapper.deleteMiddle(role.getId());
        // 添加role_menu中间表
        menuMapper.addMiddle(role.getId(), role.getMenus());
        // 删除role_permission 中间表
        permissionMapper.deleteMiddle(role.getId());
        // 添加role_permission 中间表
        permissionMapper.addMiddle(role.getId(), role.getPermissions());
    }

    /**
     * 删除角色信息
     * 1.修改角色信息
     * 2.删除中间表信息 t_role_menu  t_role_permission
     * @param
     */
    @Override
    public void delete(Long id) {
        // 删除角色信息
        super.delete(id);
        // 删除role_menu中间表
        menuMapper.deleteMiddle(id);
        // 删除role_permission 中间表
        permissionMapper.deleteMiddle(id);
    }
}
